上一篇我們介紹了Struct這個語法,也大致介紹它的宣告、使用方式,不曉得大家有沒有清楚一些呢!
今天我們來介紹跟實際檔案操作有關的--「讀檔 & 寫檔」的開檔部分!
一般來說我們在操作檔案時,會有最基本的兩個動作,就是使用前(要對檔案做任何事情之前)先做開檔的動作「fopen」,以及使用完畢(程式結束前)時也要記得關檔「fclose」,其他看是要讀檔抑或是寫檔則是看需要再進行。
#include <stdio.h>
int main(){
//開始使用前,設定file文件指針並以w模式開檔
FILE *fptr;
fptr = fopen("TheTXT.txt","w");
//寫入檔案
fprintf(fptr,"this a test txt.");
//程式結束前閉檔
fclose(fptr);
return 0;
}
回傳0,表示程式運行成功。
可以看到在這個文件裡有我們寫入的字串了。
其實fprintf跟先前學過的printf(第八篇)很像,其實就是用來寫檔案版本的「printf」,也可以加入格式指定字 & 特殊字元(第七篇),運用上的差別只在於fprintf的第一位參數,必須是對象為文件、檔案的指針,而使用方式與printf並沒有其他不同。
可以看到fprintf的文件聲明:
int fprintf(FILE *stream, const char *format, ...)
int printf(const char *format, ...)
其實是沒什麼太大差異的,所以只要熟悉printf的使用方法,fprintf就不是問題啦!不曉得大家有沒有記起來這個小規則了呢,也要記得在使用前開檔,而使用完畢要閉檔喔!
其中比較特別的是我們在使用fopen進行開檔時,需小心的設定好模式,也要注意不同模式下檔案使用的方法不同,而如果來先將不同開檔模式整理在下表的話,會像這樣:
模式 | 說明 | 若文件存在 | 若文件不存在 |
---|---|---|---|
r | 開啟檔案讀取 | 開檔、指針指向內容開頭 | 錯誤 |
w | 創建檔案寫入 | 清除已存在內容、重新指向內容開頭 | 創建新檔 |
a | 開啟或創建檔案寫至尾端 | 不影響內容,指向內容之尾(續寫) | 創建新檔 |
r+ | 開起檔案讀寫 | 開檔、指針指向內容開頭 | 錯誤 |
w+ | 創建檔案讀寫 | 清除已存在內容、重新指向內容開頭 | 創建新檔 |
a+ | 開啟、創建檔案讀寫 | 不影響內容,指向內容之尾(續寫) | 創建新檔 |
還有跟以上模式差不多,但為了**二進位檔案(.dat檔)**的模式:
模式 | 說明 | 若文件存在 | 若文件不存在 |
---|---|---|---|
rb | 開啟二進位檔案讀取 | 開檔、指針指向內容開頭 | 錯誤 |
wb | 創建二進位檔案寫入 | 清除已存在內容、重新指向內容開頭 | 創建新檔 |
ab | 開啟或創建二進位檔案寫至尾端 | 不影響內容,指向內容之尾(續寫) | 創建新檔 |
rb+ | 開起二進位檔案讀寫 | 開檔、指針指向內容開頭 | 錯誤 |
wb+ | 創建二進位檔案讀寫 | 清除已存在內容、重新指向內容開頭 | 創建新檔 |
ab+ | 開啟、創建二進位檔案讀寫 | 不影響內容,指向內容之尾(續寫) | 創建新檔 |
從表中我們可以看到各個模式的操作,也應該可以看出指令的規律了,r相關的指令針對於已存在之檔案,w相關指令則相當於清空重寫。a相關的指令類似於續寫檔案的概念。
另外提醒大家寫檔讀檔真的要小心,尤其是w相關的模式,一不小心把有要讀取內容的檔案弄成這模式會整組不見的!真的要注意使用開檔的模式!